/* -*-jde-*- */
package app.alumnoe.cv.beans;

import app.conexion.Conexion;
import app.conexion.ConexionException;
import app.util.SQLInjectionException;
import app.util.Validator;
import app.util.appException;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 * Tipo de conbtratación que se permite y quiere el usuario
 *
 * @author Victor Miguel Peralta Santa Anna
 * @since Diciembre 2011
 * @version 0.1
 */
public class TipoContratacion {

    /**
     * El identificador del tipo del elemento tipo de contratación
     */
    private int nIdTipoContratacion;
    /**
     * El identificador del curriculum vitae
     */
    private int nIdCV;
    /**
     * Tipo de contratación que pretende el alumno / egresado
     */
    private String sTipocontratacion;

    /**
     * El constructor para los diferentes tipos de contratación
     *
     * @param nIdTipoContratacion El identificador de tipo de contratación. -1
     * si es nuevo.
     * @param nIdCV El identificador para asignar eltipo de contratación a un CV
     * @param sTipocontratacion La cadena del tipo de contratación
     */
    public TipoContratacion(int nIdTipoContratacion, int nIdCV, String sTipocontratacion) {
        this.nIdCV = nIdCV;
        this.nIdTipoContratacion = nIdTipoContratacion;
        this.sTipocontratacion = sTipocontratacion;
    }

    /**
     * @return the nIdCV
     */
    public int getnIdCV() {
        return nIdCV;
    }

    /**
     * @return the sTipocontratacion
     */
    public String getsTipocontratacion() {
        return sTipocontratacion;
    }

    /**
     * @return the nIdTipoContratacion
     */
    public int getnIdTipoContratacion() {
        return nIdTipoContratacion;
    }

    /**
     * @param sTipocontratacion the sTipocontratacion to set
     */
    public void setsTipocontratacion(String sTipocontratacion) {
        this.sTipocontratacion = sTipocontratacion;
    }

    /**
     * Guarda el objeto en la base de datos independientemente si este es nuevo
     * o no.
     */
    public void save() throws appException {

        try {

            Conexion con = new Conexion();
            String query = "select ";
            if (nIdTipoContratacion == -1) {
                query += "addCVTipoContratacion(" + nIdCV;
                query += ", '" + sTipocontratacion + "');";

                if (!Validator.checkSQLInjection(query)) {
                    ResultSet r = con.exec(query);
                    while (r.next()) {
                        int resultado = r.getInt("addcvtipocontratacion");
                        this.nIdTipoContratacion = resultado;
                    }
                }

            } else {
                query += "updateTipoContratacion(" + nIdTipoContratacion;
                query += ", '" + sTipocontratacion + "');";

                con.exec(query);
            }

            con.close();

        } catch (ConexionException ce) {
            System.err.println(ce);
            Logger.getLogger(Conexion.class.getName()).log(Level.SEVERE, null, ce);
            throw new appException("No se pudo guardar el elemento: Tipo de contratación");
        } catch (SQLException sqle) {
            System.err.println(sqle);
            Logger.getLogger(Conexion.class.getName()).log(Level.SEVERE, null, sqle);
            throw new appException("No se pudo guardar el elemento: Tipo de contratación");
        } catch (SQLInjectionException sqlie) {
            System.err.println(sqlie);
            Logger.getLogger(Conexion.class.getName()).log(Level.SEVERE, null, sqlie);
            throw new appException(sqlie.getMessage());
        }

    }

    /**
     * Borra el objeto de la base de datos.
     */
    public void delete() throws appException {
        try {
            Conexion con = new Conexion();
            String query = "select deleteTipoContratacion( " + nIdTipoContratacion + " );";
            con.exec(query);
            con.close();
        } catch (ConexionException ce) {
            System.err.println(ce);
            Logger.getLogger(Conexion.class.getName()).log(Level.SEVERE, null, ce);
            throw new appException("No se pudo borrar el elemento: Tipo de contratación");
        }
    }

    @Override
    public String toString() {
        return "TipoContratacion{" + "nIdTipoContratacion=" + nIdTipoContratacion + ", nIdCV=" + nIdCV + ", sTipocontratacion=" + sTipocontratacion + '}';
    }

    /**
     * Conexiones de prueba a la base de datos
     *
     * @param args
     * @throws ConexionException
     * @throws SQLException
     * @throws appException
     */
    public static void main(String args[]) throws ConexionException, SQLException, appException {

        //nuevo
        TipoContratacion tc = new TipoContratacion(-1, 1, "c");
        tc.save();
        // existente
        //TipoContratacion tc = new TipoContratacion(1, 1, "c");
        //tc.setsTipocontratacion("a");
        //tc.save();

        //tc.delete();

        System.out.println(tc);


    }
}
